home *** CD-ROM | disk | FTP | other *** search
/ MacWorld: Complete Mac Interactive / Macworld Complete Mac Interactive CD)(1994).iso / The Best of BMUG / Utilities / Text and Speech / Alpha.5.76 / Tcl / SystemCode / filesets.tcl < prev    next >
Text File  |  1994-03-11  |  4KB  |  126 lines

  1.  
  2. #===============================================================================================
  3. # Create new filesets either by the "Utils:Add Fileset..." menu item. These 
  4. # filesets can be made permanent by "Utils:Dump Fileset..."ing the fileset 
  5. # to immediately below.
  6. #
  7. # Alpha calls two fileset-related routines, 'getCurrFileSet', and 
  8. # 'getFileSetNames'. Alpha will also attempt to set the variable 'currFileSet'
  9. # on occasion, but this isn't critical.
  10. #===============================================================================================
  11.  
  12. #===========================================================================
  13. # The filesets.
  14. #===========================================================================
  15.  
  16. # Build some filesets on the fly.
  17. catch {unset fileSets}
  18. catch {unset currFileSet}
  19. catch {set fileSets(HomeDir) [glob -t TEXT "$HOME:*"]}
  20. catch {set fileSets(Help) [glob -t TEXT   "$HOME:*"]}
  21. catch {set fileSets(System) [glob -t TEXT "$HOME:Tcl:SystemCode:*.tcl"]}
  22. catch {set fileSets(User) [glob -t TEXT   "$HOME:Tcl:UserCode:*.tcl"]}
  23.  
  24.  
  25. set currFileSet ""
  26.  
  27. #===========================================================================
  28. # The support routines.
  29. #===========================================================================
  30. # Called from Alpha to get list of files for current file set.
  31. proc getCurrFileSet {} {
  32.     global fileSets
  33.     global currFileSet
  34.     return $fileSets($currFileSet)
  35. }
  36.  
  37. # Called from Alpha to get names. The first name returned is taken to 
  38. # be the current fileset.
  39. proc getFileSetNames {} {
  40.     global fileSets
  41.     global currFileSet
  42.     set ind [lsearch [array names fileSets] $currFileSet]
  43.     if {$ind < 0} {set ind 0}
  44.     return [linsert [lsort [lreplace [array names fileSets] $ind $ind]] 0 $currFileSet]
  45. }
  46.  
  47.  
  48. # Keep 'sets' menu up to date.
  49. trace vdelete currFileSet w shadowCurrFileSet
  50. trace variable currFileSet w shadowCurrFileSet
  51. proc shadowCurrFileSet {nm1 nm2 op} {
  52.     global fileSets
  53.     global currFileSet
  54.     foreach name [array names fileSets] {
  55.         if {$name == $currFileSet} {
  56.             markMenuItem -m choose $name on
  57.         } else {
  58.             markMenuItem -m choose $name off
  59.         }
  60.     }
  61.     return $currFileSet
  62. }
  63.  
  64. # Called in response to user changing filesets from the fileset menu.
  65. proc changeFileSet {menu item} {
  66.     global currFileSet
  67.     
  68.     markMenuItem -m choose $currFileSet off
  69.     set currFileSet $item
  70.     markMenuItem -m choose $currFileSet on
  71. }
  72.  
  73.  
  74. #===========================================================================
  75. # Add fileset.
  76. #===========================================================================
  77. proc createFileset {} {
  78.     global fileSets
  79.     global currFileSet
  80.     
  81.     set name [getline "New fileset name:" ""]
  82.     if {![string length $name]} return
  83.     
  84.     set dir [string trim [get_directory] ":"]
  85.     if {![string length $dir]} return
  86.     
  87.     set filePat [getline "File pattern:" "*"]
  88.     if {![string length $filePat]} return
  89.     
  90.     set "fileSets($name)" [glob -t TEXT "$dir:$filePat"]
  91.     menu -n choose -m -p changeFileSet [lsort [array names fileSets]]
  92.     set currFileSet $name
  93.  
  94.     if {[askyesno "Save new fileset?"] == "yes"} {
  95.         addUserLine "set \"fileSets($name)\" \[glob -t TEXT  \"$dir:$filePat\"\]"
  96.         addUserLine "addMenuItem choose \"$name\""
  97.     }
  98. }
  99.  
  100.  
  101. #===========================================================================
  102. # Dump fileset to current window. If you dump at the end of this file,
  103. # the fileset will be reloaded the next time you run Alpha.
  104. #===========================================================================
  105. proc dumpFileset {} {
  106.     global fileSets
  107.     global currFileSet
  108.     if {![catch {prompt "Fileset name:" $currFileSet} name]} {
  109.         insertText "set \"fileSets($name)\" \{\r"
  110.         foreach file "$fileSets($name)" {
  111.             insertText "\t\"$file\"\r"
  112.         }
  113.         insertText "\}\r"
  114.     }
  115. }
  116.  
  117.  
  118.  
  119. #===========================================================================
  120. # Must stay the last thing in the file! We need this so that all the 
  121. # filesets defined above make it into the menu.
  122. #===========================================================================
  123. menu -n choose -m -p changeFileSet [lsort [array names fileSets]]
  124. markMenuItem -m choose $currFileSet on
  125.  
  126.